#include "ModuleOp.h"

void ModuleOp::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);
	cb_op=new QComboBox(win);
	cb_op->addItem("+");
	cb_op->addItem("-");
	cb_op->addItem("*");
	cb_op->addItem("/");
	layout->addWidget(cb_op);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleOp::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleOp::process()
{
	if(img1.size()==img2.size())
	{
		if(img1.channels()==img2.channels())
		{
			if(cb_op->currentIndex()==0)
			{
				result=img1+img2;	
			}
			else if(cb_op->currentIndex()==1)
			{
				result=img1-img2;
			}
			else if(cb_op->currentIndex()==2)
			{
				cv::multiply(img1,img2,result);
			}
			else if(cb_op->currentIndex()==3)
			{
				cv::divide(img1,img2,result);
			}
		}
		else
		{
			std::cout<<"Erreur ModuleOp: Les images non pas le même nombre de canaux\n";
			result.release();
		}
	}
	else
	{
		std::cout<<"Erreur ModuleOp: Les images non pas la même résolution\n";
		result.release();
	}

	return result;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleOp::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{	
		m.convertTo(img1,CV_32F,1.0/255.0);
	}
	else if(n==1)
	{	
		m.convertTo(img2,CV_32F,1.0/255.0);
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleOp::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleOp::getName()
{
	return trUtf8("Opération");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleOp::nbInputs()
{
	return 2;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleOp::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleOp::getParams()
{
	return tr("no_param");
}

////////////////////////////////////////////////////////////////////////////////
QCVModuleInterface * ModuleOp::clone()
{
	return new ModuleOp;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleOp::help(int id)
{
	if(id==-2)
	{
		return trUtf8("Permet de réaliser une opération basique - + / * sortie de type floatant");
	}
	else if(id==-1)
	{
		return tr("image");
	}
	else if(id==0)
	{
		return tr("image");
	}
	else if(id==1)
	{
		return tr("image");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleOp_plugin,ModuleOp);  
